package org.xx.armory.spring5.vcode;

import java.util.Random;

import static org.xx.armory.commons.Validators.rejectIfOutOfRange;

/**
 * 用于生成验证码消息的模板。
 */
public final class VCodeUtils {
    private VCodeUtils() {
        throw new AssertionError();
    }

    /**
     * 生成一个指定位数的随机验证码。
     *
     * @param size
     *         指定位数。
     * @return 指定位数的随机验证码。
     * @throws IllegalArgumentException
     *         如果参数 {@code size} 小于 {@code 1} 或者大于 {@code 40}
     */
    public static String generateVCode(
            int size
    ) {
        rejectIfOutOfRange(size, 1, 41, "size");

        final var result = new StringBuilder(size);
        final var rand = new Random();
        for (var i = 0; i < size; ++i) {
            result.append((char) (rand.nextInt(10) + '0'));
        }

        return result.toString();
    }
}
